package com.hellobike.haxing.modules.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.hellobike.haxing.common.annotation.Dict;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 部门表
 * <p>
 *
 * @Author Steve
 * @Since 2019-01-22
 */
@Data
@TableName("t_sys_depart")
public class SysDepart implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * ID
	 */
	@TableId(type = IdType.AUTO)
	private Long id;
	/**
	 * 父机构ID
	 */
	private Long parentId;
	/**
	 * 机构/部门名称
	 */
	@Excel(name = "机构/部门名称", width = 15)
	private String departName;
	/**
	 * 英文名
	 */
	@Excel(name = "英文名", width = 15)
	private String departNameEn;
	/**
	 * 缩写
	 */
	private String departNameAbbr;
	/**
	 * 排序
	 */
	@Excel(name = "排序", width = 15)
	private Integer departOrder;
	/**
	 * 描述
	 */
	@Excel(name = "描述", width = 15)
	private Object description;
	/**
	 * 机构类别 1组织机构，2岗位
	 */
	@Excel(name = "机构类别", width = 15)
	private String orgCategory;
	/**
	 * 机构类型
	 */
	@Excel(name = "机构类型", width = 15)
	private String orgType;
	/**
	 * 机构编码
	 */
	@Excel(name = "机构编码", width = 15)
	private String orgCode;
	/**
	 * 手机号
	 */
	@Excel(name = "手机号", width = 15)
	private String mobile;
	/**
	 * 传真
	 */
	@Excel(name = "传真", width = 15)
	private String fax;
	/**
	 * 地址
	 */
	@Excel(name = "地址", width = 15)
	private String address;
	/**
	 * 备注
	 */
	@Excel(name = "备注", width = 15)
	private String memo;
	/**
	 * 状态（1启用，0不启用）
	 */
	@Excel(name = "状态", width = 15)
	@Dict(dicCode = "depart_status")
	private String status;
	/**
	 * 删除状态（0，正常，1已删除）
	 */
	@Excel(name = "删除状态", width = 15)
	@Dict(dicCode = "deleted")
	private Integer deleted;
	/**
	 * 创建人
	 */
	private Integer createBy;
	/**
	 * 创建日期
	 */
	@JsonFormat(timezone = "GMT-8", pattern = "yyyy-MM-dd HH:mm:ss")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date createTime;
	/**
	 * 更新人
	 */
	private Integer updateBy;
	/**
	 * 更新日期
	 */
	@JsonFormat(timezone = "GMT-8", pattern = "yyyy-MM-dd HH:mm:ss")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date updateTime;


	@TableField(exist = false)
	private List<Long> defaultRoleId;

	/**
	 * 重写equals方法
	 */
	@Override
	public boolean equals(Object o) {
		if (this == o) {
			return true;
		}
		if (o == null || getClass() != o.getClass()) {
			return false;
		}
		if (!super.equals(o)) {
			return false;
		}
		SysDepart depart = (SysDepart) o;
		return Objects.equals(id, depart.id) &&
				Objects.equals(parentId, depart.parentId) &&
				Objects.equals(departName, depart.departName) &&
				Objects.equals(departNameEn, depart.departNameEn) &&
				Objects.equals(departNameAbbr, depart.departNameAbbr) &&
				Objects.equals(departOrder, depart.departOrder) &&
				Objects.equals(description, depart.description) &&
				Objects.equals(orgCategory, depart.orgCategory) &&
				Objects.equals(orgType, depart.orgType) &&
				Objects.equals(orgCode, depart.orgCode) &&
				Objects.equals(mobile, depart.mobile) &&
				Objects.equals(fax, depart.fax) &&
				Objects.equals(address, depart.address) &&
				Objects.equals(memo, depart.memo) &&
				Objects.equals(status, depart.status) &&
				Objects.equals(deleted, depart.deleted) &&
				Objects.equals(createBy, depart.createBy) &&
				Objects.equals(createTime, depart.createTime) &&
				Objects.equals(updateBy, depart.updateBy) &&
				Objects.equals(updateTime, depart.updateTime);
	}

	/**
	 * 重写hashCode方法
	 */
	@Override
	public int hashCode() {

		return Objects.hash(super.hashCode(), id, parentId, departName,
				departNameEn, departNameAbbr, departOrder, description, orgCategory,
				orgType, orgCode, mobile, fax, address, memo, status,
				deleted, createBy, createTime, updateBy, updateTime);
	}
}
